// 小瓜子 更新于2020/08/24
// 封装请求函数

// 小瓜子 更新于2020/08/25
// 1. 添加错误状态码跳转
// 2. 解决登录界面拿不到token的bug

// 小瓜子 更新于2020/08/26
// 1. 添加 印错误状态码跳转至登录界面时清空token和userId
// 2. 修复 token校验失败以及未登录提示窗不弹出的bug
// 引入基础请求路径

//桃子 更新于2020/09/17
//增加了options的isMock参数
import BaseUrl from './config.js'
var time = 0;
// 函数的参数
/* 
	options:{
		url: '',
		data: '',
		method: '',
	}
*/

// 将封装的函数暴露出去，options是调用的时候传入的参数，是一个对象
export const _ajax = (options,fromInterest) => {
	// 获取localStorage中的token
	const token = uni.getStorageSync('token');
	var myRequest = new Promise((resolve, reject) => {
		//如果options里传入了Mock参数，则不自动添加BaseUrl
		uni.request({
			url: options.isMock ? options.url: BaseUrl + options.url,
			method: options.method,
			data: options.data,
			header: {
				'token': token,
			},
			success: (res) => {
				// token校验失败
				if (res.data.status == 110 && !fromInterest) {
					uni.showModal({
						// 当用户未登录时，token为空时，提示登录
						content: "还没有登录哦~要现在前往登录吗？",
						confirmText: "要要要！",
						cancelText: "下次一定！",
						success:function(btn){
							if (btn.confirm) {
								// token校验失败前往登录时，清空token和userId
								uni.removeStorageSync('userId');
								uni.removeStorageSync('token');
								uni.redirectTo({
									url: '../Login/Login'
								})
							}
							if (btn.cancel) {
								uni.hideLoading()
								return
							}
						}
					})
					return
				} else if (res.data.status == 109 && !fromInterest) {
					// 当token校验失败时，显示弹窗询问是否登录
					uni.showModal({
						content: "登录信息校验失败了哦~请检查登录",
						confirmText: "好嘞！",
						cancelText: "不了吧。",
						success:function(btn){
							// token校验失败前往登录时，清空token和userId
							uni.removeStorageSync('userId');
							uni.removeStorageSync('token');
							if (btn.confirm) {
								uni.redirectTo({
									url: '../Login/Login'
								})
							}
							if (btn.cancel) {
								uni.hideLoading()
								return
							}
						}
					})
					return
				}
				time = 0;
				resolve(res);
			},
			fail: (err) => {
				uni.showToast({
					title: '请求出错辣！>_<',
					icon: 'none'
				})
				reject(err)
			},
		})
	})
	return myRequest
}


/**
 * insertData(): 向数据库中写入数据的函数，在写入成功之后，将数据读到页面的内存中

 * @param {string} tableName 表名称
 * @param {object[]} datas 将要插入到数据库中的数据数组 
 * @param {object} that 用于调用页面中定义的方法 
 */

export const insertData = (index,datas,that) => {
	// 写入的数据字符串
	var sqlString = '';
	// 声明一个用于循环的键名
	var key;
	// 遍历datas，即页面从后台获取的数据数组
	for (let i = 0; i <= datas.length - 1; i++) {
		console.log(typeof that.userId)
		sqlString += '(null,' + that.userId + ',';
		// 遍历数组中每个元素（对象）的每个键，并将其拼接入将作为命令的字符串中
		for(key in datas[i]) {
			sqlString += '"' + datas[i][key] + '",'
		}
		// 去除最后一项的逗号
		sqlString = sqlString.substring(0,sqlString.length - 1)
		sqlString += '),';
	}
	// 去除最后一项的逗号
	sqlString = sqlString.substring(0,sqlString.length - 1)
	
	
	console.log(sqlString)
	// 调用函数将数据写入数据库中
	plus.sqlite.executeSql({
		name: 'notice',
		sql: 'insert into ' + that.tableList[index] + ' values' + sqlString,
		success: () => {
			// 当成功返回时，调用函数从数据表中读取数据
			that.getDataFromDataBase(index);
			plus.sqlite.closeDatabase({
				name:'notice',
				success: () => {
					console.log('close db after insert data into db')
				},
				fail: () => {
					console.log('fail to close db')
				}
			})
		},
		fail: (e) => {
			console.log('表写入失败')
			console.log(e)
			plus.sqlite.closeDatabase({
				name:'notice',
				success: () => {
					console.log('close db when fail to read the table')
				},
				fail: () => {
					console.log('fail to close db')
				}
			})
		}
	})
}


/**
 * 打开数据库函数
 * @param {string} dbName 需要打开的数据库名称
 * @param {string} path 数据库路径 
 */

export const opdb = (dbName,path) => {
	let time = 0
	return new Promise ((resolve,reject) => {
		plus.sqlite.openDatabase({
			name: dbName,
			path: path,
			success: (res) => {
				console.log("数据库打开成功")
				resolve(res);
			},
			fail: (err) => {
				console.log("数据库打开失败")
				console.log(err);
				reject(err);
				// if(err.code != -1402) {
				// 	return
				// }else {
				// 	time = 0
				// 	uni.showToast({
				// 		icon:'none',
				// 		title:'本地数据库连接失败，请重启应用'
				// 	})
				// }
			}
		})
	})
}